const fs = require('fs')
const path = require('path')

/**
 * 自定义函数,接受一个路径, 然后执行删除操作
 * 1: 判断当前传入的路径是否是一个文件, 直接删除当前文件即可
 * 2: 如果当前传入的是一个目录, 我们需要继续读取目录中的内容, 然后再执行删除操作
 * 3: 将删除行为定义成一个函数,然后通过递归的方式进行复用
 * 4: 将当前的名称拼接成可在删除时可使用的路径.
 */
function myRmDir(dirPath, cb) {
  // 判断当前 dirPath
  fs.stat(dirPath, (err, statObj) => {
    if (!err) {
      if (statObj.isDirectory()) {
        // 目录 ---> 继续读取
        fs.readdir(dirPath, (err, files) => {
          console.info('当前的执行路径:', dirPath)
          console.info('当前的路径下的文件 files: ', files)

          // 将读取的资源拼接成一个可识别的目录.
          let dirs = files.map((item) => {
            return path.join(dirPath, item)
          })

          // --------------- 递归的逻辑 start  ---------------
          let index = 0
          function next() {
            console.info('index:', index)
            // 跳出递归的条件
            if (index === dirs.length) {
              return fs.rmdir(dirPath, cb)
            }
            // 正常的操作
            let current = dirs[index++]
            myRmDir(current, next)
          }

          // 首次调用
          next()
          // --------------- 递归的逻辑 end  ---------------
        })
      } else {
        // 文件 ---> 直接删除
        fs.unlink(dirPath, cb)
      }
    } else {
      console.info(err)
    }
  })
}

// 测试文件
// myRmDir('data1.txt', () => {
//   console.info('删除成功')
// })

// 测试目录
myRmDir('tmp', () => {
  console.info('删除成功')
})

/**
    当前的执行路径: tmp
    当前的路径下的文件 files: [ 'a', 'b', 'tmp.txt' ]

    当前的执行路径: tmp\a
    当前的路径下的文件 files: [ 'a.txt', 'a1' ]

    当前的执行路径: tmp\a\a1
    当前的路径下的文件 files: [ 'a1.txt' ]

    当前的执行路径: tmp\b
    当前的路径下的文件 files: [ 'b.txt', 'b1' ]

    当前的执行路径: tmp\b\b1
    当前的路径下的文件 files: []

    删除成功
 */

// 使用系统 API 删除
// fs.rmdir('tmp', { recursive: true }, () => {
//   console.info('DONE')
// })
